package com.leetcode.day02;

/**
 * 给你一根长度为 n 的绳子，请把绳子剪成整数长度的 m 段（m、n都是整数，n>1并且m>1），
 * 每段绳子的长度记为 k[0],k[1]...k[m-1] 。请问 k[0]*k[1]*...*k[m-1] 可能的最大乘积是多少？
 * 例如，当绳子的长度是8时，我们把它剪成长度分别为2、3、3的三段，此时得到的最大乘积是18。
 *
 * 示例 1：

 * 来源：力扣（LeetCode）
 * 链接：https://leetcode-cn.com/problems/jian-sheng-zi-lcof
 * 著作权归领扣网络所有。商业转载请联系官方授权，非商业转载请注明出处。
 */
public class CuttingRope {




    public int cuttingRope(int n) {

        // dp[i] 代表 长度为i的绳子最大乘积
        int[] dp  = new int[n+1];
        dp[1] = 1 ;
        for (int i = 2; i <= n; i++){
            for (int j = 1 ; j < i; j++){
                int a = j * (i - j) ;
                int b = dp[j] * (i- j) ;
                int c = j * dp[i - j] ;
                int d = dp[j] * dp[i - j] ;
                int e = dp[i];
                dp[i] =  Math.max(a,Math.max(b, Math.max(c, Math.max(d, e))));
            }
        }
        return dp[n] ;
    }
}
